﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace ISIM
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Global.LangManager.SetLangFromFile();

            // Kontrola přítomnosti požadované verze .NET FW
            string netSPver = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5").GetValue("SP").ToString();

            // Pokud tam hodnota není nebo je 0 zobrazí se zpráva s odkazem na stažení FW a po odpovědi na ni se program vypne
            if ((string.IsNullOrEmpty(netSPver)) || (netSPver == "0"))
            {
                if (MessageBox.Show(Global.LangManager.Translate("netFrameworkIsNotAvailable"), Global.LangManager.Translate("error"), MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
                    System.Diagnostics.Process.Start("http://www.microsoft.com/download/en/details.aspx?id=22");

                return;
            }

            // Mutex aplikace -> ke kontrole, zda aplikace již neběží. Pokud ano tak vyšle signál, který zobrazí její hlavní okno
            bool createdNew = true;
            System.Threading.Mutex appMutex = new System.Threading.Mutex(true, Global.appName, out createdNew);

            if ((createdNew) && (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length == 1))
            {
                appMutex.ReleaseMutex();
                // Aby byla instance hlavního okna aplikace přístupná ze všady
                Global.OpenForms.mainForm = new MainForm();
                Application.Run(Global.OpenForms.mainForm);
            }
            else
                Global.SingleInstance.ShowForm();
        }
    }
}
